#define _CRT_SECURE_NO_WARNINGS 1


//#include<functional>
//#include<iostream>
//
//using namespace std;
//
//class Date
//{
//public:
//	Date(int year = 2025, int month = 1, int day = 1)
//		:_year(year)
//		,_month(month)
//		,_day(day)
//	{ }
//
//	~Date()
//	{
//		cout << "~Date()" << endl;
//	}
//private:
//	int _year;
//	int _month;
//	int _day;
//};
//
//template<class T>
//void DeleteArray(T* ptr)
//{
//	delete[] ptr;
//}
//
//namespace yyh
//{
//	template<class T>
//	class shared_ptr
//	{
//	public:
//		shared_ptr(T* ptr = nullptr)
//			:_ptr(ptr)
//			, _pcount(new int(1))
//		{ }
//
//		template<class D>
//		shared_ptr(T* ptr, D del)
//			:_ptr(ptr)
//			,_pcount(new int(1))
//			,_del(del)
//		{ }
//
//		void release()
//		{
//			if (--(*_pcount) == 0)
//			{
//				_del(_ptr);
//				delete _pcount;
//			}
//		}
//
//		shared_ptr(const shared_ptr<T>& sp)
//			:_ptr(sp._ptr)
//			,_pcount(sp._pcount)
//		{
//			(*_pcount)++;
//		}
//
//		shared_ptr<T>& operator=(const shared_ptr<T>& sp)
//		{
//			if (_ptr != sp._ptr)
//			{
//				release();
//				_ptr = sp._ptr;
//				_pcount = sp._pcount;
//				(*_pcount)++;
//			}
//			return *this;
//		}
//
//		~shared_ptr()
//		{
//			release();
//		}
//
//		T& operator*()
//		{
//			return *_ptr;
//		}
//
//		T* operator->()
//		{
//			return _ptr;
//		}
//
//	private:
//		T* _ptr;
//		int* _pcount;
//		function<void(T*)> _del = [](T* ptr) { delete ptr; };
//	};
//}
//
//int main()
//{
//	yyh::shared_ptr<Date> sp3(new Date[5], DeleteArray<Date>);
//
//	return 0;
//}


#include"AVLTree.h"

int main()
{
	int arr[] = { 8,3,10,1,6,14,4,7,13 };
	AVLTree<int> tree;
	for (auto& e : arr)
	{
		tree.insert(e);
	}
	tree.InOrder();
	cout << tree.IsAVLTree() << endl;

	return 0;
}